「现代计算机图形学入门」几何
1. 几何表示
隐式:点与点之间满足的关系,如 球体方程:\(x^2+y^2+z^2=1\)、\(f(x,y,z)=0\)
缺点:很难知道几何长啥样;优点:容易判定一个是否在表面上/内/外;
如:代数方程、构造立体几何法(Constructive Solid Geometry,通过简单几何做运算)、距离函数(SDF)、分形(Fractals 自相似)
显式:所有点直接给出,或者通过参数映射的方法。如 \(f:R^2 \rightarrow R^3; (u,v) \rightarrow (x,y,z)\)
缺点:判断点在不在表面上/内/外很难;优点:知道所有的点;
如:点云、多边形网格(Polygon Mesh)、obj文件等。
根据问题的需要选择表示方法!
应用:Camera path、Vector Fonts
2. 曲线
2.1 Bezier曲线
性质: (1)Bezier曲线起点在 \(p_0\),终点在 \(p_3\) 上;
(2)Bezier曲线在首位端点处的切向量是首尾边的 \(n\) 倍;
(3)仿射变换性质:对控制点做仿射变换后的Bezier曲线还是一样;
(仿射变换是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间)
(4)凸包性:Bezier曲线一定在控制点形成的凸包内;
2.2 de Casteljau Algorithm
\(b_0^1(t) = (1-t)b_0 + tb_1\) \(b_1^1(t) = (1-t)b_1 + tb_2\) \(b_0^2(t) = (1-t)b_0^1 + tb_1^1\)
\(b_0^2(t)=(1-t)^2b_0+2t(1-t)b_1+t^2b_2\)
2.3 通用代数形式
2.4 逐段的Bezier曲线
习惯用每四个点确定一个Bezier曲线、
而如何使分段Bezier曲线连续?即上一段曲线的的终止点作为新曲线的起始点,
上一段曲线的终止切向量的取反作为新曲线的起始切向量。
\(C^0\) 连续:只要两段曲线起始、终止点在一起。
\(C^1\) 连续:两端曲线起始、终止切线连续。
3. 曲面
3.1 Bezier曲面
可视化三次Bezier曲线
如何表示Bezier曲面上的一个点?
用一个(u,v)坐标,u 控制四个Bezier曲线运动的过程(即时间t), v 控制运动的Bezier曲线的运动的过程。
3.2 网格操作:几何处理
网格细分、网格简化、网格正规化(不出现特别尖、长的三角形)
3.2.1 网格细分(Mesh Subdivision / upsampling)
细分是要:1. 分出更多的三角形;2. 让这些三角形的位置发生一点变化,使得形状更光滑些;
Loop Subdivision
第一步,将每个三角形分成四个;
第二步,对新的顶点和旧的顶点分别移动位置让模型变得更加光滑;
Catmull-Clark Subdivision(General Mesh)
每一个细分步骤:
- 在每个面里取一个点
- 在每个边上取其中点
- 连接所有顶点
只要在一个非四边形内点上一个点,由于要和它的其他变相连,这个点就是奇异点(点的度不为4)
也就是说,非四边形面在一次细分之后,都会变成奇异点(不再存在非四边形面),再次细分后奇异点不会再增加。
3.2.2 网格简化(Mesh Simplification/downsampling)
edge collapsing(边坍缩)
思想:找到一条边,边有两个顶点,然后一捏,这个边就不存在了。
需要捏哪些边? \(\rightarrow\) 方法:Quadric Error Metrics(二次误差度量)